package pl.wroc.pwr.mss.server.ui.buttons;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;

import org.apache.log4j.Logger;

import pl.wroc.pwr.mss.logic.domain.Playlist;
import pl.wroc.pwr.mss.server.service.PlaylistService;
import pl.wroc.pwr.mss.server.ui.dialogs.JPlaylistEditDialog;
import pl.wroc.pwr.mss.server.ui.filechoosers.JDirectoryFileChooser;
import pl.wroc.pwr.mss.server.ui.tables.models.SongEditTableModel;

/**
 * Przycisk, ktory konwertuje wybrany przez uzytkownika katalog do postaci
 * playlist rozpoznawanej przez aplikacje serwererowa.
 * Konwersja odbywa sie na nastepujacej zasadzie:
 * 1. Nazwa katalogu staje sie nazwa playlisty.
 * 2. Wszystkie pliki mp3 staja sie utworami tej playlisty.
 * 
 * @author mjagus
 */
public class JLoadDirectoryButton extends JButton implements ActionListener
{
    /**
     * Identyfikator klasy.
     */
    private static final long serialVersionUID = -2515528963921610487L;

    /**
     * Logger tej klasy.
     */
    private static final Logger log = Logger.getLogger(JLoadDirectoryButton.class);

    /**
     * Okno dialogowe do wyboru katalogow.
     */
    private JDirectoryFileChooser directoryFileChooser;

    /**
     * Okno dialogowe edycji playlisty.
     */
    private JPlaylistEditDialog playlistEditDialog;

    /**
     * Serwis dla encji playlist.
     */
    private PlaylistService playlistService;

    /**
     * Iniciuje komponent.
     */
    public JLoadDirectoryButton()
    {
        super("Load directory");

        super.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        log.info("Opening directory file chooser");
        int option = directoryFileChooser.showOpenDialog(playlistEditDialog);
        log.info("Closing directory file chooser");

        if(option == JFileChooser.APPROVE_OPTION)
        {
            File dir = directoryFileChooser.getSelectedFile();
            log.info("Directory has been selected: " + dir.getPath());

            Playlist playlist = playlistService.createPlaylistForDirectory(dir);
            playlistEditDialog.setPlaylist(playlist);
            playlistEditDialog.getPlaylistNameTextField().setText(playlist.getName());

            SongEditTableModel songEditTableModel = (SongEditTableModel)playlistEditDialog.getSongEditTable().getModel();
            songEditTableModel.fireTableDataChanged();
        }
    }

    /**
     * @return Okno dialogowe wyboru katalogow
     */
    public JDirectoryFileChooser getDirectoryFileChooser()
    {
        return directoryFileChooser;
    }

    /**
     * @return Okno dialogowe edycji playlisty
     */
    public JPlaylistEditDialog getPlaylistEditDialog()
    {
        return playlistEditDialog;
    }

    /**
     * @return Serwis encji Playlist
     */
    public PlaylistService getPlaylistService()
    {
        return playlistService;
    }

    /**
     * @param directoryFileChooser Okno dialogowe wyboru katalogow
     */
    public void setDirectoryFileChooser(JDirectoryFileChooser directoryFileChooser)
    {
        this.directoryFileChooser = directoryFileChooser;
    }

    /**
     * @param playlistEditDialog Okno dialogowe edycji playlisty
     */
    public void setPlaylistEditDialog(JPlaylistEditDialog playlistEditDialog)
    {
        this.playlistEditDialog = playlistEditDialog;
    }

    /**
     * @param playlistService Serwis dla encji Playlist
     */
    public void setPlaylistService(PlaylistService playlistService)
    {
        this.playlistService = playlistService;
    }
}
